export declare interface FlowPanel {
  init: (tableForm: any, data?: any) => void
  updatedForms: (data: any) => void
}

// 节点
export declare interface NodeItem {
  name: string
  nodeId: string
  type: number
  childNode: NodeItem | null
  prevId?: string
  properties: Properties
  conditionNodes?: NodeItem[]
}

// 节点属性
export declare interface Properties {
  approvalMethod: number // 审批方式 1会签 2或签
  approvalNone: number // 审批人为空时 1自动通过 2自动转交管理员
  canOver: number // 审批人可否选择继续或完结流程  1否 2是
  actionerRules: ActionerRule[]

  conditions: Condition[] | [] // 条件节点

  actioners: Actioner[] | [] // 动作节点
  formData: FormConfig[] | [] // 表单权限配置

  enableRejectForm?: string // 1是 2否
  rejectForms?: []
  rejectNodeId: string // 驳回节点ID
  isRejectNode: string // 是否指定驳回节点ID 1是 2否
}

// 表单权限配置
export declare interface FormConfig {
  title: string // 表单项名称
  inputKey: string // 表单项key
  isEdit: boolean // 是否可编辑
  isView: boolean // 是否可查看
  childs?: FormConfig[] | [] // 子表单权限配置 - 多行表格控件
}

// 审批/抄送规则
export declare interface ActionerRule {
  type: number // 审批类型
  level: number // 审批层级 | 连续多级上级时的最终审批级别
  endType: number // 审批终点类型 1指定角色 2指定层级
  userInputId: string // 人员选择器ID
  actioners: Actioner[]
}

// 审批/抄送者
export declare interface Actioner {
  id: string
  name: string
  type: number
}

// 条件组合
export declare interface Conditions {
  [index: number]: Condition
}

// 条件
export declare interface Condition {
  type: number
  key: string
  label: string
  values?: string[]
  actioners?: Actioner[]
  value?: string
  numberType?: number
  minValue?: string
  maxValue?: string
  unit?: string
}
